<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
        // 标记-清除（Mark-and-Sweep） 是一种常见的垃圾回收算法，它通过标记和清理两个阶段来识别和回收不再使用的对象。
        //     与引用计数不同，标记-清除算法能够有效处理循环引用问题，因此被广泛应用于现代的垃圾回收系统中。
        //     下面是对这个算法的详细讲解：

        // 标记-清除算法的基本步骤
        //     标记-清除算法分为两个主要阶段：
        //     1. 标记阶段（Mark Phase）
        //         在这个阶段，垃圾回收器会从根对象（通常是活动的局部变量、静态变量、堆栈等）开始，遍历所有可以访问到的对象，并将这些对象标记为“活动对象”。
        //         如果一个对象是根对象的直接或间接引用对象，或者是从根对象可达的对象，那么它是活动对象，应该被保留。
        //         具体来说，垃圾回收器会遍历整个对象图，并在每个对象上设置一个标记（如一个布尔值或者特定的标记位），表示该对象是“活跃”的，不应被回收。

        //     2. 清除阶段（Sweep Phase）
        //         在标记阶段完成后，所有未标记的对象（即不再被任何活动对象引用的对象）就会被认为是 垃圾对象，可以安全回收。
        //         清除阶段的任务就是遍历整个堆，删除所有未标记的对象，释放它们所占用的内存。

        //     标记-清除的优缺点
        //         优点：
        //             处理循环引用
        //                 标记-清除算法能够有效地解决 循环引用 的问题。引用计数无法回收互相引用的对象，
        //                 而标记-清除会在标记阶段检查对象是否可以被访问，因此不会受到循环引用的困扰。
        //                 不需要显式维护引用计数

        //                 标记-清除不需要像引用计数那样维护每个对象的引用计数，这减少了额外的计算开销，
        //                 特别是在频繁创建和销毁对象的情况下，能减少性能瓶颈。

        //             适应复杂的引用关系
        //                 标记-清除能够处理任意复杂的对象图，它会遍历整个对象图来标记活动对象，不会受到引用关系复杂性的限制。

        //         缺点：
        //             回收过程中的暂停（Stop-the-World）
        //                 标记-清除在回收过程中需要暂停应用程序的执行，这个停顿被称为 Stop-the-World。
        //                 在标记和清除阶段，所有应用程序线程都需要停止，直到垃圾回收完成。这种停顿时间可能会导致应用程序的响应变慢，尤其是在垃圾回收过程中需要处理大量数据时。

        //             内存碎片化
        //                 清除阶段只是简单地释放对象的内存，而不会进行内存压缩或合并，因此 内存碎片化
        //                 是标记-清除算法的一个显著问题。随着垃圾回收的进行，程序内存可能会变得不连续，
        //                 导致新的内存分配变得困难，从而影响性能。性能开销
        //             标记-清除算法需要遍历整个对象图，尤其是在大量对象存在时，标记阶段和清除阶段的时间开销可能非常大
        //             。随着对象数量的增加，回收的时间和计算成本也会增加。
        //         不适合实时系统
        //             由于标记-清除的暂停时间不可预测，它通常不适合用于对实时性要求极高的系统，比如嵌入式系统、
        //             实时游戏或金融交易系统。在这些系统中，垃圾回收的停顿可能会影响系统的稳定性和响应速度。
</script>
</html>